# 导包
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

# 实例化edge浏览器
driver = webdriver.Edge()

# 打开网页
driver.get('http://localhost:8088/ecshop/user.php?act=register')

# 第一个 ID 元素定位
driver.find_element(By.ID, 'username')

# 第二个 NAME 属性定位
driver.find_element(By.NAME, 'username')

# 第三个 CLASS_NAME 元素定位
driver.find_element(By.CLASS_NAME, 'inputBg')

# 第四种 TAG_NAME 元素定位
driver.find_element(By.TAG_NAME, 'input')

# 第五种 CSS_SELECTOR 元素定位
# 1、 基本选择器
# 1）、 通过 id 选择器定位--用 # 井号开头，后面跟上属性值
driver.find_element(By.CSS_SELECTOR, '#username')        # 查找具有 id 属性的标签

# 2）、 类 选择器定位--用 . 点表示，后面跟上属性值
driver.find_element(By.CSS_SELECTOR, '.inputBg')

# 3）、 标签 选择器定位--直接去写标签名
driver.find_element(By.CSS_SELECTOR, 'input')     # 查找第一个 <input> 标签

# 2、 属性选择器
# 4）、 单个属性定位--语法，先写一个 [] 中括号--再加上 属性 和 属性值
driver.find_element(By.CSS_SELECTOR, '[type="text"]')     # 单个属性定位

# 5）、 多个属性定位--属性务必要带上中括号
driver.find_element(By.CSS_SELECTOR, '[type="text"][id="username"]')     # 多个属性定位
# 先写一个标签名，再写属性--标签名+属性选择器组合定位
driver.find_element(By.CSS_SELECTOR, 'input[class="inputBg"]')
# 通过标签名+ID选择器组合定位
driver.find_element(By.CSS_SELECTOR, 'input#username')
# 通过标签名+类选择器组合定位
driver.find_element(By.CSS_SELECTOR, 'input.inputBg')

# 通过标签层级定位--例如找table表格下面的tr标签--首先从第一级父元素table--然后跟上符号 > 大于号--然后下一级的标签tbody--再找下一级的tr
driver.find_element(By.CSS_SELECTOR, 'table>tbody>tr')

# 表格层级定位--例如找找table表格下面的第一个tr标签下第二个td--tr跟上:冒号写first-child-- 空格 td:nth-child(2) 标签、属性
driver.find_element(By.CSS_SELECTOR, 'table>tbody>tr:first-child td:nth-child(2) input[type="text"]')

# 第六种 LINK_TEXT 完整超链接文本定位--单击操作 click()
driver.find_element(By.LINK_TEXT, '我已有账号，我要登录')

# 第七种 PARTIAL_LINK_TEXT 部分超链接文本定位--单击操作 click() 点击效果
driver.find_element(By.PARTIAL_LINK_TEXT, '我要登录')

# 第八种 XPATH 定位方式
# 1、 使用绝对路径定位，一个斜杠 / 代表是绝对路径 --不建议使用
driver.find_element(By.XPATH, '/html/body/div[7]/div[1]/form/table/tbody/tr[1]/td[2]/input')
# 优化一下--两个斜杠 // 代表是相对路径
driver.find_element(By.XPATH, '/html/body//input[@name="username"]')

# 2、 相对路径定位
driver.find_element(By.XPATH, '//input[@name="username"]')

# 3、通过文本内容定位--关键字函数：text()
driver.find_element(By.XPATH, '//*[text()="我已有账号，我要登录"]')

# 4、通过部分文本内容定位（模糊匹配）--关键字函数：contains()
driver.find_element(By.XPATH, '//*[contains(text(),"我已有账号")]')

# 5、通过元素属性定位
driver.find_element(By.XPATH, '//*[@id="username"]')

# 6、使用逻辑运算符
driver.find_element(By.XPATH, '//*[@name="username" and @id="username"]')

# 7、使用函数
driver.find_element(By.XPATH, '//input[contains(@class,"inputBg")]').send_keys('这是一个使用函数测试')

#页面等待3秒
sleep(3)
# 关闭浏览器
driver.quit()